//
//  main.m
//  base_foundation-02
//
//  Created by China Dragon on 2023/7/9.
//

#import <Foundation/Foundation.h>

void stringCreate(){
    char *c_str = "a is string";// C语言中的字符串
    NSString *str1 = @"a is string";//这里是常量，不需要管内存，不需要释放； 不可变的字符串 类似Java中的 final string
    
    NSString *str2 = [[NSString alloc]init];
    str2 = @"a is string";
    
    NSString *str3 = [[NSString alloc] initWithString:@"a is string"];
    
    //不需要管理内存，因为系统自带的静态方法，内部已经自动做了释放操作
    str3 = [NSString stringWithString:@"a is string"];
    
    //initWithUTF8String:(const char *)，将 C 语言中的字符串转换成 oc里的 字符串
    NSString *str4 = [[NSString alloc] initWithUTF8String:"a is string"];
    str4 = [NSString stringWithUTF8String:"a is string"];
    
    NSString *str5 = [[NSString alloc] initWithFormat:@"my age is %i and height is %0.2f ", 20, 1.76f];
    
    str5 = [NSString stringWithFormat:@"my age is %i and height is %0.2f ", 20, 1.76f];
    
    NSLog(@"str1 is %@, str2 is %@, str3 is %@, str4 is %@, str5 is %@", str1, str2, str3, str4, str5);
}

void stringCreatFromFile(){
    //从文件中读取文本
    NSString *path = @"/Users/chinadragon/Desktop/test2.txt";
    
    //stringWithContentsOfFile 方法已经过时了，注意文件内容是：12455246262，如果是aargrt测试,下面读取的是null,不能解析中文
//    NSString *str1 = [NSString stringWithContentsOfFile:path];
//    NSLog(@"str1 文件内容 is %@", str1);
    
    NSError *tempError;
    
    
    //GBK编码  kCFStringEncodingGB_18030_2000 最大, 不能直接传，需要用 CFStringConvertNSStringEncodingToEncoding 转换一下
    //指定字符串编码NSUTF8StringEncoding
//    NSString *str2 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error: nil];//nil 表示空 null
    NSString *str2 = [NSString stringWithContentsOfFile:path encoding:kCFStringEncodingGB_18030_2000 error: &tempError];//&tempError 将指针地址传如进来
//    NSString *str2 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error: &tempError];//&tempError 将指针地址传如进来
//    NSString *str2 = [NSString stringWithContentsOfFile:path encoding:CFStringConvertNSStringEncodingToEncoding(kCFStringEncodingGB_18030_2000) error:nil];//nil 表示空 null
    if(tempError == nil){
        NSLog(@"读取文件成功 文件内容 is %@", str2);
    }else{
        NSLog(@"读取文件失败 %@", tempError);
    }

    NSURL *url = [NSURL URLWithString:@"file:///Users/chinadragon/Desktop/test2.txt"];
    NSString *str3 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"读取文件成功  str3 文件内容 is %@", str3);
    
    NSURL *url2 = [NSURL URLWithString:@"https://www.bai.com"];
    NSString *str4 = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"读取文件成功  str4 文件内容 is %@", str4);
}

/*
    字符串导出，写入文件里
 */
void stringExport(){
    NSString *str = @"grg3gvf字符串导出，写入文件里3113553";
    NSError *myerror;
    //如果文件不存在，会自动创建文件
    NSString *path = @"/Users/chinadragon/Desktop/testabc.txt";
    // atomically： YES 表示 原子性，写内容时，会创建一个临时文件，先写入临时文件里，再复制到目标文件，，非原子性，创建文件或者直接写入目标文件
    [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&myerror];
    if(myerror){
//        NSLog(@"写入失败 %@",myerror);
        //localizedDescription 会返回主要的错误信息
        NSLog(@"写入失败 %@",[myerror localizedDescription]);
    }else{
        NSLog(@"写入成功");
    }
    
    
}

void test(NSString **str){
//    (*str) = @"123";
    *str = @"123";
    
//    s = @"123";
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
//        stringCreate();
//        stringCreatFromFile();
        NSString *s = @"456";
        test(&s);
        NSLog(@"s is %@", s);
        stringExport();
    }
    return 0;
}
